package com.grupobbva.iici.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class FiltroDTO {

	private List<ParametroDTO> lstParametroDTO=null;
	private HashMap<String, ParametroDTO> lstParametroDTOHM=null;
	private List<ParametroDTO> lstOrdenamientoDTO=null;
	private HashMap<String, String> aliasDTO=null;
	
	public FiltroDTO(String ... alias) {
		lstParametroDTO=new ArrayList<ParametroDTO>();
		lstParametroDTOHM=new HashMap<String, ParametroDTO>();
		lstOrdenamientoDTO=new ArrayList<ParametroDTO>();
		setAliasDTO(new HashMap<String, String>());
		for(String alia:alias) {
			getAliasDTO().put(alia, alia);
		}
	}
	
	private void clear(){
		lstParametroDTO=new ArrayList<ParametroDTO>();
		lstParametroDTOHM=new HashMap<String, ParametroDTO>();
		lstOrdenamientoDTO=new ArrayList<ParametroDTO>();
	}
	
	public <T> T getParametro(String nombreParametro,Class<T> clase){
		ParametroDTO parametroDTO=lstParametroDTOHM.get(nombreParametro);
		if(parametroDTO==null){
			return null;
		}
		return (T)parametroDTO.getValorParametro();
	}
	public Object getParametro(String nombreParametro){
		ParametroDTO parametroDTO=lstParametroDTOHM.get(nombreParametro);
		if(parametroDTO==null){
			return null;
		}
		return parametroDTO.getValorParametro();
	}
	
	public List<ParametroDTO> getFiltro(){
		return lstParametroDTO;
	}
	public List<ParametroDTO> getOrdenamiento(){
		return lstOrdenamientoDTO;
	}
	
	public void addParametro(String nombreParametro,Object valorParametro){
		ParametroDTO parametroDTO=new ParametroDTO();
		parametroDTO.setNroOrden(lstParametroDTO.size());
		parametroDTO.setNombreParametro(nombreParametro);
		parametroDTO.setValorParametro(valorParametro);
		parametroDTO.setTipoParametro(ParametroDTO.TIPO_IGUAL);
		lstParametroDTOHM.put(nombreParametro, parametroDTO);
		lstParametroDTO.add(parametroDTO);	
	}
	public void addParametroLike(String nombreParametro,Object valorParametro){
		ParametroDTO parametroDTO=new ParametroDTO();
		parametroDTO.setNroOrden(lstParametroDTO.size());
		parametroDTO.setNombreParametro(nombreParametro);
		parametroDTO.setValorParametro(valorParametro);
		parametroDTO.setTipoParametro(ParametroDTO.TIPO_LIKE);
		lstParametroDTO.add(parametroDTO);	
	}
	public void addOrdenamientoAscendente(String nombreParametro){
		ParametroDTO parametroDTO=new ParametroDTO();
		parametroDTO.setNroOrden(lstOrdenamientoDTO.size());
		parametroDTO.setNombreParametro(nombreParametro);
		parametroDTO.setOrdenamiento(ParametroDTO.ORDEN_ASCENDENTE);
		lstOrdenamientoDTO.add(parametroDTO);	
	}
	public void addOrdenamientoDescendente(String nombreParametro){
		ParametroDTO parametroDTO=new ParametroDTO();
		parametroDTO.setNroOrden(lstOrdenamientoDTO.size());
		parametroDTO.setNombreParametro(nombreParametro);
		parametroDTO.setOrdenamiento(ParametroDTO.ORDEN_DESCENDENTE);
		lstOrdenamientoDTO.add(parametroDTO);	
	}

	public HashMap<String, String> getAliasDTO() {
		return aliasDTO;
	}

	public void setAliasDTO(HashMap<String, String> aliasDTO) {
		this.aliasDTO = aliasDTO;
	}
	
	
}
